<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>20_reduce</title>
</head>

<body>
  <script>
    /**
     * reduce()
     * 语法: 数组.reduce( function(prev, item, index, arr) {}, 初始值)
     *    => 函数, 函数根据数组中的成员进行重复调用
     *      -> 第一个参数: 初始值 或 每一次叠加后的结果
     *      -> 第二个参数: 每一项
     *      -> 第三个参数: 索引
     *      -> 第四个参数: 原始数组
     *    => 初始值: 默认是 0, 表示从什么位置开始叠加
     * 作用: 进行叠加统计
    */


    var arr = [100, 200, 300, 400, 500];
    console.log('原始数组:', arr);

    var result = arr.reduce(function a(prev, item) {

      // 以 return 的形式书写每次的叠加条件
      return prev + item
    }, 0)
    console.log(result);



    /**
     * reduce 原理
     *    1. 准备了一个初始值, 按照你传递的第二个参数来定
     *      var init = 1500;
     *    2. 根据原始数组了调用 a 函数
     *      => 第一次调用 a(0, 100, 0, 原始数组),     return 0 + 100,     把 返回值再次赋值给 init
     *      => 第二次调用 a(100, 200, 1, 原始数组),   return 100 + 200,   把 返回值再次赋值给 init
     *      => 第三次调用 a(300, 300, 2, 原始数组),   return 300 + 300,   把 返回值再次赋值给 init
     *      => 第四次调用 a(600, 400, 3, 原始数组),   return 600 + 400,   把 返回值再次赋值给 init
     *      => 第五次调用 a(1000, 500, 4, 原始数组),  return 1000 + 500,  把 返回值再次赋值给 init
    */
  </script>
</body>

</html>
